#include <REGX52.H>




// 定义全局变量，用于存储按键次数
unsigned char key_count = 0;

/**
 * @brief 获取按键次数
 * @return 返回当前按键次数，并将计数清零
 */
unsigned char key()
{
    unsigned char count = 0;
    count = key_count;  // 获取按键次数
    key_count = 0;      // 清零按键计数
    return count;       // 返回按键次数
}

/**
 * @brief 检测当前按键状态
 * @return 返回值：
 *         1 - P3_1按键被按下
 *         2 - P3_0按键被按下
 *         3 - P3_2按键被按下
 *         4 - P3_3按键被按下
 *         0 - 无按键被按下
 */
unsigned char key_status()
{
    // 使用静态变量存储状态（根据实际情况调整static关键字）
    unsigned char Key_Count = 0;

    // 检测按键状态
    if (P3_1 == 0) { Key_Count = 1; } // 按键1被按下
    if (P3_0 == 0) { Key_Count = 2; } // 按键2被按下
    if (P3_2 == 0) { Key_Count = 3; } // 按键3被按下
    if (P3_3 == 0) { Key_Count = 4; } // 按键4被按下

    return Key_Count; // 返回按键状态
}

/**
 * @brief 扫描按键按下事件
 *        如果需要扫描抬起事件，可以将Now_Status和Las_Status的值调换
 */
void key_scan()
{
    // 使用静态变量存储当前状态和上一次状态
    static unsigned char Now_Status = 0;  // 当前按键状态
    static unsigned char Las_Status = 0; // 上一次按键状态

    // 保存上一次状态
    Las_Status = Now_Status;

    // 更新当前状态
    Now_Status = key_status();

    // 检测按键按下事件（按下时Now_Status变化，Las_Status为0）
    if (Now_Status == 1 && Las_Status == 0)
    {
        key_count = 1; // 记录按键1按下事件
    }
    if (Now_Status == 2 && Las_Status == 0)
    {
        key_count = 2; // 记录按键2按下事件
    }
    if (Now_Status == 3 && Las_Status == 0)
    {
        key_count = 3; // 记录按键3按下事件
    }
    if (Now_Status == 4 && Las_Status == 0)
    {
        key_count = 4; // 记录按键4按下事件
    }
}

/**
 * @brief 定时中断函数，用于定时调用按键扫描函数
 *        需要根据具体项目启用此函数并设置相应的定时器
 */
// void Timer_Cut() interrupt 1
// {
//     static unsigned int KEY_Count = 0; // 定义计数变量
//     
//     TL0 = 0x66;     // 设置定时初值（低字节）
//     TH0 = 0xFC;     // 设置定时初值（高字节）
//     
//     KEY_Count++;    // 每次中断触发，计数加1
//     
//     if (KEY_Count == 10) // 判断计数是否达到预定值（避免误触）
//     {
//         KEY_Count = 0;   // 计数清零
//         key_scan();      // 调用按键扫描函数
//     }
// }
